home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / General Tools / Headers / ArgList.h < prev    next >
Text File  |  1999-07-13  |  4KB  |  95 lines

  1. #ifndef _ARGLIST_
  2. #define _ARGLIST_
  3.  
  4. #pragma once
  5.  
  6.  
  7. #include <null.h>
  8. #include "UtilStr.h"
  9.  
  10. class MetaExpr;
  11. class Arg;
  12. class CEgOStream;
  13. class CEgIStream;
  14.  
  15.  
  16. class ArgList  {
  17.  
  18.     friend class ArgList;
  19.     
  20.     public:    
  21.                                 ArgList();
  22.         virtual                    ~ArgList();
  23.     
  24.         //     Post:    Adds any args in the given string meta line to this arg list.  Note that if arg 'blah' is in this list
  25.         //             and someone calls this.SetArgs( "hi=123,bye=345" ), then 'blah' is still in this list and has the original
  26.         //             value it had before the call to SetArgs().
  27.         //    Note:    An example of a meta arg list:  hi=123,name="sally",andy="really cool"
  28.         //    Note:    This call is functionally the same as:    ArgList temp; temp.SetArgs( str ); this.SetArgs( temp );
  29.         //    Note:    In the above example, if you wanted to get rid of blah (and all other args before the Set, call Clear())
  30.         //    Note:    For SetArgs( char*, long ), len == -1 means that the length will be computed. 
  31.         void                    SetArgs( const UtilStr& inArgList )                                { SetArgs( inArgList.getCStr(), inArgList.length() );        }
  32.         void                    SetArgs( const char* inArgList, long inLen = -1 );
  33.         
  34.         //    A more flexible version of SetArgs() than above.  This ignores line breaks, "//" comments, and "/*"-"*/" block comments.
  35.         void                    SetArgs( CEgIStream* inStream );
  36.         
  37.         //    Post:    Similar to above except that the arg list is already in the form of an arg list. 
  38.         void                    SetArgs( const ArgList& inArgs );
  39.         
  40.         // Appends/Exports the args in this list to a meta string format.  This means all chars in the string
  41.         //    will be above or equal to 0x20 and less than 0x80.
  42.         //    Post:  If inLineBreaks is true, a CR/LF is put after each arg
  43.         void                    ExportTo( UtilStr& ioStr, bool inLineBreaks = false ) const;
  44.         void                    ExportTo( CEgOStream* ioStream, bool inLineBreaks = false ) const;
  45.         
  46.         // Writes this arg list to a stream, with no regard to byte range (in contrast to ExportTo, where all the
  47.         //    output bytes are >= 0x20 and < 0x80
  48.         void                    WriteTo( CEgOStream* ioStream );
  49.         void                    ReadFrom( CEgIStream* ioStream );
  50.         
  51.         // Removes all args from this argList
  52.         void                    Clear();
  53.  
  54.         
  55.         void                    DeleteArg( long inArgID );
  56.         
  57.         //    Pre:    No byte in <inArgID> can be a -, =, or "
  58.         void                    SetArg( long inArgID, long inArg );
  59.         void                    SetArg( long inArgID, const UtilStr& inArg );
  60.         void                    SetArg( long inArgID, const char* inArgStr );
  61.         
  62.  
  63.         
  64.         //    Post:    The specified argument <inArgID> is fetched and transferred to <outArg>.
  65.         //    Note:    If the arg is found, true is returned, else false is returned and <outArg> is zeroed.
  66.         inline bool                ArgExists( long inArgID ) const                                { return FetchArg( inArgID ) != NULL;            }
  67.         bool                    GetArg( long inArgID, bool& outArg ) const;
  68.         bool                    GetArg( long inArgID, char& outArg ) const;
  69.         bool                    GetArg( long inArgID, long& outArg ) const;
  70.         bool                    GetArg( long inArgID, UtilStr& outStr ) const;
  71.         bool                    GetArg( long inID, UtilStr& outStr, long inIndex ) const    { return GetArg( IndexedID2ID( inID, inIndex ), outStr );    }
  72.         long                    GetArg( long inArgID ) const;
  73.         double                    GetFloat( long inArgID ) const;
  74.         const UtilStr*            GetStr( long inArgID ) const;
  75.         inline bool                GetArg( long inArgID, unsigned char& outArg ) const            { return GetArg( inArgID, (char&) outArg );        }
  76.         inline bool                GetArg( long inArgID, unsigned long& outArg ) const            { return GetArg( inArgID, (long&) outArg );        }
  77.  
  78.         long                    GetArraySize( long inID ) const;
  79.         long                    NumArgs() const;
  80.         
  81.         enum {
  82.             cArgSeparator        = ','
  83.         };
  84.         
  85.     protected:        
  86.         Arg*                    mHeadArg;
  87.         
  88.         Arg*                    FetchArg( long inID ) const;
  89.         
  90.         static long                IndexedID2ID( long inBaseID, long inIndex );
  91. };
  92.  
  93.  
  94.  
  95. #endif